PÔhjalik juhend kohandatud teisendajate loomiseks scikit-learnis, et ehitada vastupidavaid masinÔppe konveiereid ja tÀiustada andmete eeltöötlust.
MasinÔppe konveier: Scikit-learni kohandatud teisendajate arendamine
MasinĂ”ppe konveierid on vastupidavate ja hooldatavate masinĂ”ppemudelite loomisel hĂ€davajalikud. Scikit-learn (sklearn) pakub vĂ”imsat raamistikku nende konveierite loomiseks. Iga hea konveieri pĂ”hikomponent on vĂ”ime teostada kohandatud andmeteisendusi. See artikkel uurib kohandatud teisendajate arendamist scikit-learnis, pakkudes pĂ”hjalikku juhendit andmeteadlastele ja masinĂ”ppeinseneridele ĂŒle maailma.
Mis on masinÔppe konveier?
MasinÔppe konveier on omavahel aheldatud andmetöötluskomponentide jada. Need komponendid hÔlmavad tavaliselt:
- Andmete puhastamine: puuduvate vÀÀrtuste, erindite ja ebakÔlade kÀsitlemine.
- Tunnuste loomine: uute tunnuste loomine olemasolevatest, et parandada mudeli jÔudlust.
- Tunnuste valik: mudeli jaoks kÔige asjakohasemate tunnuste valimine.
- Mudeli treenimine: masinÔppemudeli treenimine ettevalmistatud andmetel.
- Mudeli hindamine: treenitud mudeli jÔudluse hindamine.
Konveieri kasutamine pakub mitmeid eeliseid, sealhulgas:
- Reprodutseeritavus: tagamine, et samu andmetöötluse samme rakendatakse jÀrjepidevalt.
- Modulaarsus: andmetöötluse töövoo jaotamine korduvkasutatavateks komponentideks.
- Hoolduse lihtsus: andmetöötluse töövoo uuendamise ja hooldamise lihtsustamine.
- Lihtsustatud juurutamine: masinÔppemudelite juurutamise protsessi sujuvamaks muutmine.
Miks kohandatud teisendajad?
Scikit-learn pakub laia valikut sisseehitatud teisendajaid tavaliste andmetöötlusĂŒlesannete jaoks. Paljudes reaalsetes olukordades peate aga tegema kohandatud andmeteisendusi, mis on spetsiifilised teie andmetele ja probleemile. Siin tulevadki mĂ€ngu kohandatud teisendajad. Kohandatud teisendajad vĂ”imaldavad teil kapseldada oma kohandatud andmetöötlusloogika korduvkasutatavatesse komponentidesse, mida saab sujuvalt integreerida scikit-learni konveierisse.
Kujutage nĂ€iteks ette, et töötate ĂŒlemaailmse e-kaubanduse platvormi kliendiandmetega. Teil vĂ”ib olla vaja luua kohandatud teisendaja, mis teisendab tehinguvaluutad ĂŒhisesse valuutasse (nt USD), tuginedes ajaloolistele vahetuskurssidele. VĂ”i kaaluge olukorda, mis hĂ”lmab andurite andmeid IoT-seadmetest erinevates riikides; vĂ”iksite luua kohandatud teisendaja andmete normaliseerimiseks kohalike ajavööndite ja mÔÔtĂŒhikute alusel.
Kohandatud teisendaja loomine
Kohandatud teisendaja loomiseks scikit-learnis peate looma klassi, mis pÀrib klassidest sklearn.base.BaseEstimator ja sklearn.base.TransformerMixin. Teie klass peab implementeerima kaks meetodit:
fit(self, X, y=None): see meetod Ôpib kÔik teisenduseks vajalikud parameetrid. Paljudel juhtudel tagastab see meetod lihtsaltself.transform(self, X): see meetod rakendab teisenduse andmetele.
Siin on pÔhiline nÀide kohandatud teisendajast, mis lisab igale tunnusele konstantse vÀÀrtuse:
from sklearn.base import BaseEstimator, TransformerMixin
import numpy as np
class AddConstantTransformer(BaseEstimator, TransformerMixin):
def __init__(self, constant=1):
self.constant = constant
def fit(self, X, y=None):
return self
def transform(self, X):
return X + self.constant
Vaatame seda nÀidet lÀhemalt:
- Vajalike teekide importimine:
BaseEstimator,TransformerMixinteegistsklearn.basejanumpynumbriliste operatsioonide jaoks. - Klassi defineerimine:
AddConstantTransformerpÀrib klassidestBaseEstimatorjaTransformerMixin. - Konstruktor (
__init__): see meetod initsialiseerib teisendajaconstantvÀÀrtusega (vaikimisi 1). fit-meetod: see meetod tagastab lihtsaltself, kuna see teisendaja ei pea andmetest mingeid parameetreid Ôppima.transform-meetod: see meetod lisabconstantvÀÀrtuse igale elemendile sisendandmetesX.
KasutusnÀide
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
X = np.array([[1, 2], [3, 4], [5, 6]])
pipeline = Pipeline([
('scaler', StandardScaler()),
('add_constant', AddConstantTransformer(constant=2))
])
X_transformed = pipeline.fit_transform(X)
print(X_transformed)
See nÀide demonstreerib, kuidas kasutada AddConstantTransformer'it konveieris. Esmalt skaleeritakse andmed, kasutades StandardScaler'it, ja seejÀrel lisatakse konstant, kasutades meie kohandatud teisendajat.
Kohandatud teisendajate arenenud arendus
NĂŒĂŒd uurime mĂ”ningaid keerukamaid stsenaariume ja tehnikaid kohandatud teisendajate loomiseks.
Kategoriaalsete tunnuste kÀsitlemine
Kategoriaalsed tunnused on masinĂ”ppes levinud andmetĂŒĂŒp. Saate luua kohandatud teisendajaid, et teostada kategoriaalsete tunnustega erinevaid toiminguid, nĂ€iteks one-hot-kodeerimist, sildikodeerimist vĂ”i tunnuste rĂ€simist.
Siin on nÀide kohandatud teisendajast, mis teostab one-hot-kodeerimist mÀÀratud veergudel:
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
class CategoricalEncoder(BaseEstimator, TransformerMixin):
def __init__(self, categorical_features=None):
self.categorical_features = categorical_features
self.encoder = None
def fit(self, X, y=None):
if self.categorical_features is None:
self.categorical_features = X.select_dtypes(include=['object']).columns
self.encoder = OneHotEncoder(handle_unknown='ignore', sparse_output=False)
self.encoder.fit(X[self.categorical_features])
return self
def transform(self, X):
X_encoded = self.encoder.transform(X[self.categorical_features])
X_encoded = pd.DataFrame(X_encoded, index=X.index, columns=self.encoder.get_feature_names_out(self.categorical_features))
X = X.drop(columns=self.categorical_features)
X = pd.concat([X, X_encoded], axis=1)
return X
Selles nÀites:
- Teisendaja tuvastab kategoriaalsed veerud automaatselt (kui pole mÀÀratud).
- See kasutab kodeerimiseks
OneHotEncoder'it scikit-learnist. - See kÀsitleb tundmatuid kategooriaid, kasutades
handle_unknown='ignore'. - Kodeeritud tunnused liidetakse tagasi algse andmeraamistikuga.
Puuduvate vÀÀrtuste kÀsitlemine
Puuduvad vÀÀrtused on veel ĂŒks levinud probleem masinĂ”ppe andmestikes. Saate luua kohandatud teisendajaid puuduvate vÀÀrtuste asendamiseks, kasutades erinevaid strateegiaid, nĂ€iteks keskmise, mediaani vĂ”i moodi asendamist.
Siin on nÀide kohandatud teisendajast, mis asendab puuduvad vÀÀrtused mediaaniga:
from sklearn.impute import SimpleImputer
class MissingValueImputer(BaseEstimator, TransformerMixin):
def __init__(self, strategy='median', missing_values=np.nan):
self.strategy = strategy
self.missing_values = missing_values
self.imputer = None
def fit(self, X, y=None):
self.imputer = SimpleImputer(strategy=self.strategy, missing_values=self.missing_values)
self.imputer.fit(X)
return self
def transform(self, X):
return self.imputer.transform(X)
See teisendaja kasutab asendamiseks SimpleImputer'it scikit-learnist. See vÔimaldab teil mÀÀrata asendusstrateegia ja vÀÀrtuse, mida kasutatakse puuduvate vÀÀrtuste tÀhistamiseks.
Tunnuste skaleerimine ja normaliseerimine
Tunnuste skaleerimine ja normaliseerimine on paljude masinÔppealgoritmide jaoks olulised eeltöötluse sammud. Saate luua kohandatud teisendajaid erinevate skaleerimis- ja normaliseerimistehnikate rakendamiseks.
Kuigi scikit-learn pakub teisendajaid nagu StandardScaler ja MinMaxScaler, vÔite vajada kohandatud skaleerijat spetsiifiliste andmejaotuste jaoks. NÀiteks, kui teil on andmeid vÀga viltuse jaotusega, vÔib PowerTransformer (samuti saadaval scikit-learnis) olla sobivam. Siiski saate selle kapseldada kohandatud teisendajasse, et hallata selle parameetreid ja integreerida see sujuvalt oma konveierisse.
from sklearn.preprocessing import PowerTransformer
class SkewedDataTransformer(BaseEstimator, TransformerMixin):
def __init__(self, method='yeo-johnson'):
self.method = method
self.transformer = None
def fit(self, X, y=None):
self.transformer = PowerTransformer(method=self.method)
self.transformer.fit(X)
return self
def transform(self, X):
return self.transformer.transform(X)
Mitme teisenduse kombineerimine
MĂ”nikord peate samadele andmetele rakendama mitu teisendust. Saate luua kohandatud teisendaja, mis ĂŒhendab mitu teisendust ĂŒheks sammuks. See aitab teie konveierit lihtsustada ja muuta selle loetavamaks.
Siin on nĂ€ide kohandatud teisendajast, mis ĂŒhendab one-hot-kodeerimise ja puuduvate vÀÀrtuste asendamise:
class CombinedTransformer(BaseEstimator, TransformerMixin):
def __init__(self, categorical_features=None, missing_value_strategy='median'):
self.categorical_features = categorical_features
self.missing_value_strategy = missing_value_strategy
self.categorical_encoder = None
self.missing_value_imputer = None
def fit(self, X, y=None):
self.categorical_encoder = CategoricalEncoder(categorical_features=self.categorical_features)
self.missing_value_imputer = MissingValueImputer(strategy=self.missing_value_strategy)
self.categorical_encoder.fit(X)
self.missing_value_imputer.fit(X)
return self
def transform(self, X):
X = self.categorical_encoder.transform(X)
X = self.missing_value_imputer.transform(X)
return X
See teisendaja kasutab eelmiste nĂ€idete CategoricalEncoder'it ja MissingValueImputer'it, et teostada nii one-hot-kodeerimist kui ka puuduvate vÀÀrtuste asendamist ĂŒhe sammuga.
Kohandatud teisendajate arendamise parimad tavad
Siin on mÔned parimad tavad, mida jÀrgida kohandatud teisendajate arendamisel:
- Hoidke see lihtsana: iga teisendaja peaks tĂ€itma ĂŒhte, hĂ€sti mÀÀratletud ĂŒlesannet.
- Muutke see korduvkasutatavaks: kujundage oma teisendajad vĂ”imalikult ĂŒldiseks, et neid saaks uuesti kasutada erinevates konveierites.
- KĂ€sitlege erijuhtumeid: kaaluge, kuidas teie teisendaja kĂ€sitleb erijuhtumeid, nagu puuduvad vÀÀrtused, erindid ja ootamatud andmetĂŒĂŒbid.
- Kirjutage ĂŒhikteste: kirjutage ĂŒhikteste, et tagada teie teisendaja korrektne toimimine.
- Dokumenteerige oma kood: dokumenteerige oma kood selgelt, et teised saaksid aru, kuidas teie teisendajat kasutada.
Reaalse elu nÀited
Uurime veel mÔningaid reaalse elu nÀiteid kohandatud teisendajatest.
KuupÀevatunnuste loomine
Aegridaandmetega töötades on sageli kasulik eraldada kuupĂ€evadest tunnuseid, nagu nĂ€dalapĂ€ev, aasta kuu vĂ”i aasta kvartal. Selle ĂŒlesande tĂ€itmiseks saate luua kohandatud teisendaja.
class DateFeatureExtractor(BaseEstimator, TransformerMixin):
def __init__(self, date_columns=None):
self.date_columns = date_columns
def fit(self, X, y=None):
return self
def transform(self, X):
for col in self.date_columns:
X[col + '_dayofweek'] = X[col].dt.dayofweek
X[col + '_month'] = X[col].dt.month
X[col + '_quarter'] = X[col].dt.quarter
return X
See teisendaja eraldab mÀÀratud kuupÀevaveergudest nÀdalapÀeva, kuu ja kvartali.
Tekstitunnuste loomine
Tekstiandmetega töötades on sageli kasulik luua tunnuseid, kasutades tehnikaid nagu TF-IDF vĂ”i sĂ”nasĂ€ngistused. Nende ĂŒlesannete tĂ€itmiseks saate luua kohandatud teisendajaid. Kaaluge nĂ€iteks kliendiarvustusi mitmes keeles. Teil vĂ”ib vaja minna kohandatud teisendajat, mis tĂ”lgib arvustused inglise keelde enne TF-IDF vektoriseerimise rakendamist.
MÀrkus: TÔlketeenused nÔuavad sageli API-vÔtmeid ja vÔivad kaasa tuua kulusid. See nÀide keskendub kohandatud teisendaja struktuurile.
# MÀrkus: See nÀide nÔuab tÔlketeenust (nt Google Translate API) ja API-vÔtit
# from googletrans import Translator # NÀidisteek (paigalda kÀsuga pip install googletrans==4.0.0-rc1)
class TextFeatureExtractor(BaseEstimator, TransformerMixin):
def __init__(self, text_column, language='en'):
self.text_column = text_column
self.language = language
# self.translator = Translator() # TÔlkija instantsi loomine (nÔuab seadistamist)
def fit(self, X, y=None):
return self
def transform(self, X):
# NÀide: TÔlgi inglise keelde (asenda tegeliku tÔlkeloogikaga)
# X[self.text_column + '_translated'] = X[self.text_column].apply(lambda text: self.translator.translate(text, dest=self.language).text)
# NÀitlik tÔlge demonstratsiooni eesmÀrgil
X[self.text_column + '_translated'] = X[self.text_column].apply(lambda text: "TÔlgitud: " + text)
# Rakenda siin TF-IDFi vÔi muid teksti vektoriseerimise tehnikaid
return X
Georuumiliste tunnuste loomine
Georuumiliste andmetega töötades saate luua kohandatud teisendajaid tunnuste eraldamiseks, nagu kaugus lĂ€hima linnani, rahvastikutihedus vĂ”i maakasutuse tĂŒĂŒp. Kaaluge nĂ€iteks kinnisvarahindade analĂŒĂŒsimist ĂŒlemaailmselt. Saate luua kohandatud teisendaja, mis hangib antud asukoha keskmise sissetulekutaseme, kasutades vĂ€liseid API-sid laius- ja pikkuskraadide pĂ”hjal.
Integreerimine olemasolevate teekidega
Kohandatud teisendajaid saab kasutada teiste Pythoni teekide funktsionaalsuse kapseldamiseks scikit-learni konveierisse. See vÔimaldab teil kasutada teiste teekide vÔimsust, saades samal ajal kasu konveieri struktuurist ja organiseeritusest.
NÀiteks vÔiksite kasutada kohandatud teisendajat, et integreerida oma masinÔppe konveierisse teek anomaaliate tuvastamiseks, aegridade prognoosimiseks vÔi pilditöötluseks.
KokkuvÔte
Kohandatud teisendajad on vĂ”imas tööriist vastupidavate ja hooldatavate masinĂ”ppe konveierite loomiseks scikit-learnis. Kapseldades oma kohandatud andmetöötlusloogika korduvkasutatavatesse komponentidesse, saate luua konveiereid, mida on lihtsam mĂ”ista, uuendada ja juurutada. Pidage meeles, et jĂ€rgida parimaid tavasid, kirjutada ĂŒhikteste ja dokumenteerida oma kood, et tagada teie kohandatud teisendajate usaldusvÀÀrsus ja hooldatavus. MasinĂ”ppeoskuste arendamisel muutub kohandatud teisendajate arendamise valdamine hindamatuks keeruliste ja mitmekesiste reaalsete probleemide lahendamisel ĂŒle maailma. Alates rahvusvahelise e-kaubanduse valuutakonversioonide kĂ€sitlemisest kuni IoT-seadmete andurite andmete töötlemiseni ĂŒle maailma, annavad kohandatud teisendajad teile vĂ”imaluse kohandada oma konveiereid vastavalt teie andmete ja rakenduste spetsiifilistele vajadustele.